<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>强制类型转换</title>
  </head>
  <body>
    <script type="text/javascript">
      /* 
        类型转换主要将其他类型转换为
        String Number Boolean
      */
      /* 
       将其他类型转换为String
         方式一:
              -调用类转换类型的toString()方法
              -该方法不会影响原变量，他会将转换后的变量结果返回
              -null,undefined不能转换为String
          方式二：
              -调用String()函数并将要转换的变量作为参数传给该函数
              -使用该函数对于Number和Boolean与toString()无区别
                但是null和undefined会直接将其转换为字符串‘null’‘undefined’
      */
      // Number->String
      var a = 123
      console.log('a是', typeof a) //number
      var b = a.toString()
      console.log('b是', typeof b) //string
      var b1 = String(a)
      console.log('b1是', typeof b1) //string
      // Boolean -> String
      var c = true
      console.log('c是', typeof c) //boolean
      var d = c.toString()
      console.log('d是', typeof d) //string
      var d1 = String(c)
      console.log('d1是', typeof d1) //string
      // null->String
      var e = null
      console.log('e是', typeof e)
      //var f = e.toSource()//报错
      var f1 = String(e)
      console.log('f1是', typeof f1)
      var g = undefined
      console.log('g是', typeof g)
      //var h = g.toString() //报错
      var g1 = String(g)
      console.log('g1是', typeof g1)
    </script>
    <script type="text/javascript">
      /* 
          将其他类型转换为Number
            转换情况：
              如果是纯数字字符串则直接将其转换为数字
              如果字符串中有非数字内容则转换为NaN
              空字符串转换为0
              Boolean转数字true=>1 false=>false
              Null转成数字0
              undefined转数字NaN
            方式一：
               -使用Number()函数
            方式二：
                -parseInt()把字符串转换为整数Number
                -parseFloat()把字符串转换为浮点数Number
            如果对非字符串使用parseInt()或parseFloat()它会将其转换为字符串然后在操作
          注意：对于070类似字符串转换为数字时有的浏览器按10进制转换为数字有的按8进制转换为数字
          使用parseInt('070',10)指定进制解决该兼容问题
       */
      console.log('============其他类型转换为Number===========')
      var a = '123.444e'
      var b = Number(a)
      var c = parseInt(a)
      var d = parseFloat(a)
      console.log(b) //NaN
      console.log(c) //123
      console.log(d) //123.444
      console.log(typeof b) //Number
      /* 
        在js中如果需要表示16进制的数字则需要以0x开头
              如果需要表示8进制的数字则需要以 0 开头
              如果需要表示2进制的数字则需要以 0b开头(2进制不是所有浏览器兼容)
      */
      console.log('==========进制===========')
      var n = 0x10
      var m = 010
      var y = 0b10
      console.log(n)
      console.log(m)
      console.log(y)
    </script>
    <script type="text/javascript">
      /* 
        其他类型转换为Boolean
          调用Boolean()
          数字转Boolean:除了0和NaN其他转换为true
          字符串转Boolean:除了空字符串其他转为true
          null => false
          undefined => false
      */
     var a = ''
     a = Boolean(a)
     console.log(a)
    </script>
  </body>
</html>
